//
//  WBMainViewController.swift
//  swift微博
//
//  Created by qlwl on 17/2/25.
//  Copyright © 2017年 qlwl. All rights reserved.
//

import UIKit

class WBMainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        setupChildController()
        setupComposeButton()
    }
    /**
        portrait  : 书评，肖像
        landscape : 横屏，风景画
        -  使用代码控制设备的方向，好处，可以在需要横屏的时候单独处理
        -  设置支持的方向之后，当前的控制器及自控制器都会遵循这个方向
        -  如果播放视频，通常是通过 modal 展现的
     */
    
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
        return .portrait
    }
    
    private lazy var composeButton: UIButton = UIButton.yw_imageButton("tabbar_compose_icon_add", backgroundImageName: "tabbar_compose_button")
    
    // MARK: - 监听方法
    // 撰写微博
    // private 能保证方法私有，仅在当前对象访问
    // @objc 允许这个函数在运行时通过OC的消息机制被访问
    @objc fileprivate func composeStatus(){
        print("撰写微博")
        let vc = UIViewController()
        vc.view.backgroundColor = UIColor.yw_random()
        let nav = UINavigationController(rootViewController: vc)
        present(nav, animated: true, completion: nil)
        
    }
    private func setupComposeButton()  {
        tabBar.addSubview(composeButton)
        //计算按钮的宽度
        let count = CGFloat(childViewControllers.count)
        //将向内锁紧的宽度减少，能让按钮的宽度变大，盖住容错点，防止穿帮
        let w = tabBar.bounds.width / count - 1
        composeButton.frame = tabBar.bounds.insetBy(dx: 2 * w, dy: 0)
        composeButton.addTarget(self, action: #selector(composeStatus), for: .touchUpInside)
    }

}

//extension 类似于OC中的分类，在swift中用来切分代码块
//可以吧相近的功能的函数，放在一个extension钟
//便于代码维护
//注意： 和OC的分类一样，extension 中不能定义属性
extension WBMainViewController {

    //设置所有自控制器
    //当我们标记为private时，意为真的私有还是文件内可共享呢？
    //当我们如果意图为真正的私有时，必须保证这个类或者结构体在一个单独的文件里。否则可能同文件里其他的代码访问到。
    //过去的private对应现在的fileprivate。现在的private则是真正的私有，离开了这个类或者结构体的作用域外面就无法访问。
    fileprivate func setupChildController()   {
        //tabbar_home_selected
        let array:[[String: Any]] = [
            ["clsName" : "WBHomeViewController", "title": "首页", "imageName" : "home", "visitorInfo":["imageName" : "", "message" : "关注一些人，回这里看看有什么惊喜"]
            ],
            ["clsName" : "WBMessageViewController", "title": "消息", "imageName" : "message_center", "visitorInfo":["imageName" : "visitordiscover_image_message", "message" : "登录后，别人的评论你的微薄，发给你的消息，都会在这里收到通知"]],
            ["clsName" : "UIViewController"],
            ["clsName" : "WBDiscoverViewController", "title": "发现", "imageName" : "discover", "visitorInfo":["imageName" : "visitordiscover_image_message", "message" : "登陆后，最新、最热微薄尽在掌握，不再会与实事擦肩而过"]],
            ["clsName" : "WBProfileViewController", "title": "我", "imageName" : "profile", "visitorInfo":["imageName" : "visitordiscover_image_profile", "message" : "登陆后，你的微薄、相册、个人资料会显示在这里，展示给别人"]]
            ]
        
        //(array as NSArray).write(toFile: "/Users/qlwl/Desktop/demo.plist", atomically: true)
        
        var arrayM = [UIViewController]()
        for dict in array {
            arrayM.append(controller(dict: dict))
        }
        viewControllers = arrayM
    }
    ///使用字典创建一个自控制器
    // paramenter dict: 信息字典[clsName, title, imageName]
    private func controller(dict: [String:Any]) -> UIViewController{
        //1.去的字典的内容
        guard let clsName = dict["clsName"] as? String,
              let title = dict["title"] as? String,
              let imageName = dict["imageName"] as? String,
              let cls = NSClassFromString(Bundle.main.namespace() + "." + clsName) as? WBBaseViewController.Type,
              let visitorDict = dict["visitorInfo"] as? [String :String] else {
            return UIViewController()
        }
        // 2.创建爱你视图控制器
        
        let vc = cls.init()
        vc.title = title
        vc.vistitorInfo = visitorDict
        //3 设置图片
        vc.tabBarItem.image = UIImage(named: "tabbar_" + imageName )
        vc.tabBarItem.selectedImage = UIImage(named: "tabbar_" + imageName + "_selected")?.withRenderingMode(.alwaysOriginal)
        
        //设置tabbar 的标题字体 (大小)
        vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.orange], for: .highlighted)
        //系统默认是 12 好字，修改字体代销，要设置Normal 的字体大小
        vc.tabBarItem.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFont(ofSize: 13)], for: UIControlState(rawValue: 0))
        
        //实例化导航控制器的时候，会调用push方法将rootVC压栈
        let nav = WBNavigationController(rootViewController: vc)
        
        return nav
    }
}
